Introduction

This project investigates electricity consumption and renewable energy generation patterns in Germany using hourly time-series data. We explore how solar and wind energy production, electricity demand, and temperature vary across time and geography.

By integrating energy data from ENTSO-E and weather data from the German Meteorological Service (DWD), we conduct visual and statistical analyses to understand:

Packages Used

We used the following R packages throughout the project for data wrangling, visualization, and geospatial mapping:

library(tidyverse)
library(lubridate)
library(slider)
library(forcats)
library(rnaturalearth)
library(sf)
library(plotly)
library(viridisLite)
library(viridis)

These packages enabled robust preprocessing, time-based feature extraction, rolling averages, geospatial visualizations, and interactive graphics, all of which were integral to our analysis.

Dataset Used

We used two primary data sources for our analysis, covering the years 2014 to 2020. The first is the ENTSO-E dataset, which provides time series data on electricity consumption across various European countries. The second is the DWD weather dataset, offering hourly temperature records for several German cities. In the sections below, we provide a detailed description of each dataset.

European Network of Transmission System Operators for Electricity (ENTSO-E)

The ENTSO-E Time Series Dataset is commonly used in electricity market and power systems analysis. It typically contains hourly time series data from the European Network of Transmission System Operators for Electricity (ENTSO-E). This dataset contains the following key data fields:

df <- read_csv("time_series_60min_singleindex.csv") %>%
  mutate(timestamp = ymd_hms(utc_timestamp))
knitr::kable(head(df, 10))
utc_timestamp cet_cest_timestamp AT_load_actual_entsoe_transparency AT_load_forecast_entsoe_transparency AT_price_day_ahead AT_solar_generation_actual AT_wind_onshore_generation_actual BE_load_actual_entsoe_transparency BE_load_forecast_entsoe_transparency BE_solar_generation_actual BE_wind_generation_actual BE_wind_offshore_generation_actual BE_wind_onshore_generation_actual BG_load_actual_entsoe_transparency BG_load_forecast_entsoe_transparency BG_solar_generation_actual BG_wind_onshore_generation_actual CH_load_actual_entsoe_transparency CH_load_forecast_entsoe_transparency CH_solar_capacity CH_solar_generation_actual CH_wind_onshore_capacity CH_wind_onshore_generation_actual CY_load_actual_entsoe_transparency CY_load_forecast_entsoe_transparency CY_wind_onshore_generation_actual CZ_load_actual_entsoe_transparency CZ_load_forecast_entsoe_transparency CZ_solar_generation_actual CZ_wind_onshore_generation_actual DE_load_actual_entsoe_transparency DE_load_forecast_entsoe_transparency DE_solar_capacity DE_solar_generation_actual DE_solar_profile DE_wind_capacity DE_wind_generation_actual DE_wind_profile DE_wind_offshore_capacity DE_wind_offshore_generation_actual DE_wind_offshore_profile DE_wind_onshore_capacity DE_wind_onshore_generation_actual DE_wind_onshore_profile DE_50hertz_load_actual_entsoe_transparency DE_50hertz_load_forecast_entsoe_transparency DE_50hertz_solar_generation_actual DE_50hertz_wind_generation_actual DE_50hertz_wind_offshore_generation_actual DE_50hertz_wind_onshore_generation_actual DE_LU_load_actual_entsoe_transparency DE_LU_load_forecast_entsoe_transparency DE_LU_price_day_ahead DE_LU_solar_generation_actual DE_LU_wind_generation_actual DE_LU_wind_offshore_generation_actual DE_LU_wind_onshore_generation_actual DE_amprion_load_actual_entsoe_transparency DE_amprion_load_forecast_entsoe_transparency DE_amprion_solar_generation_actual DE_amprion_wind_onshore_generation_actual DE_tennet_load_actual_entsoe_transparency DE_tennet_load_forecast_entsoe_transparency DE_tennet_solar_generation_actual DE_tennet_wind_generation_actual DE_tennet_wind_offshore_generation_actual DE_tennet_wind_onshore_generation_actual DE_transnetbw_load_actual_entsoe_transparency DE_transnetbw_load_forecast_entsoe_transparency DE_transnetbw_solar_generation_actual DE_transnetbw_wind_onshore_generation_actual DK_load_actual_entsoe_transparency DK_load_forecast_entsoe_transparency DK_solar_capacity DK_solar_generation_actual DK_wind_capacity DK_wind_generation_actual DK_wind_offshore_capacity DK_wind_offshore_generation_actual DK_wind_onshore_capacity DK_wind_onshore_generation_actual DK_1_load_actual_entsoe_transparency DK_1_load_forecast_entsoe_transparency DK_1_price_day_ahead DK_1_solar_generation_actual DK_1_wind_generation_actual DK_1_wind_offshore_generation_actual DK_1_wind_onshore_generation_actual DK_2_load_actual_entsoe_transparency DK_2_load_forecast_entsoe_transparency DK_2_price_day_ahead DK_2_solar_generation_actual DK_2_wind_generation_actual DK_2_wind_offshore_generation_actual DK_2_wind_onshore_generation_actual EE_load_actual_entsoe_transparency EE_load_forecast_entsoe_transparency EE_solar_generation_actual EE_wind_onshore_generation_actual ES_load_actual_entsoe_transparency ES_load_forecast_entsoe_transparency ES_solar_generation_actual ES_wind_onshore_generation_actual FI_load_actual_entsoe_transparency FI_load_forecast_entsoe_transparency FI_wind_onshore_generation_actual FR_load_actual_entsoe_transparency FR_load_forecast_entsoe_transparency FR_solar_generation_actual FR_wind_onshore_generation_actual GB_GBN_load_actual_entsoe_transparency GB_GBN_load_forecast_entsoe_transparency GB_GBN_price_day_ahead GB_GBN_solar_capacity GB_GBN_solar_generation_actual GB_GBN_solar_profile GB_GBN_wind_capacity GB_GBN_wind_generation_actual GB_GBN_wind_profile GB_GBN_wind_offshore_capacity GB_GBN_wind_offshore_generation_actual GB_GBN_wind_offshore_profile GB_GBN_wind_onshore_capacity GB_GBN_wind_onshore_generation_actual GB_GBN_wind_onshore_profile GB_NIR_load_actual_entsoe_transparency GB_NIR_load_forecast_entsoe_transparency GB_NIR_solar_capacity GB_NIR_wind_onshore_capacity GB_NIR_wind_onshore_generation_actual GB_UKM_load_actual_entsoe_transparency GB_UKM_load_forecast_entsoe_transparency GB_UKM_solar_capacity GB_UKM_solar_generation_actual GB_UKM_wind_capacity GB_UKM_wind_generation_actual GB_UKM_wind_offshore_capacity GB_UKM_wind_offshore_generation_actual GB_UKM_wind_onshore_capacity GB_UKM_wind_onshore_generation_actual GR_load_actual_entsoe_transparency GR_load_forecast_entsoe_transparency GR_solar_generation_actual GR_wind_onshore_generation_actual HR_load_actual_entsoe_transparency HR_load_forecast_entsoe_transparency HR_solar_generation_actual HR_wind_onshore_generation_actual HU_load_actual_entsoe_transparency HU_load_forecast_entsoe_transparency HU_solar_generation_actual HU_wind_onshore_generation_actual IE_load_actual_entsoe_transparency IE_load_forecast_entsoe_transparency IE_wind_onshore_generation_actual IE_sem_load_actual_entsoe_transparency IE_sem_load_forecast_entsoe_transparency IE_sem_price_day_ahead IE_sem_wind_onshore_generation_actual IT_load_actual_entsoe_transparency IT_load_forecast_entsoe_transparency IT_solar_generation_actual IT_wind_onshore_generation_actual IT_BRNN_price_day_ahead IT_BRNN_wind_onshore_generation_actual IT_CNOR_load_actual_entsoe_transparency IT_CNOR_load_forecast_entsoe_transparency IT_CNOR_price_day_ahead IT_CNOR_solar_generation_actual IT_CNOR_wind_onshore_generation_actual IT_CSUD_load_actual_entsoe_transparency IT_CSUD_load_forecast_entsoe_transparency IT_CSUD_price_day_ahead IT_CSUD_solar_generation_actual IT_CSUD_wind_onshore_generation_actual IT_FOGN_price_day_ahead IT_FOGN_solar_generation_actual IT_FOGN_wind_onshore_generation_actual IT_GR_price_day_ahead IT_NORD_load_actual_entsoe_transparency IT_NORD_load_forecast_entsoe_transparency IT_NORD_price_day_ahead IT_NORD_solar_generation_actual IT_NORD_wind_onshore_generation_actual IT_NORD_AT_price_day_ahead IT_NORD_CH_price_day_ahead IT_NORD_FR_price_day_ahead IT_NORD_SI_price_day_ahead IT_PRGP_price_day_ahead IT_PRGP_solar_generation_actual IT_PRGP_wind_onshore_generation_actual IT_ROSN_price_day_ahead IT_ROSN_solar_generation_actual IT_ROSN_wind_onshore_generation_actual IT_SACO_AC_price_day_ahead IT_SACO_DC_price_day_ahead IT_SARD_load_actual_entsoe_transparency IT_SARD_load_forecast_entsoe_transparency IT_SARD_price_day_ahead IT_SARD_solar_generation_actual IT_SARD_wind_onshore_generation_actual IT_SICI_load_actual_entsoe_transparency IT_SICI_load_forecast_entsoe_transparency IT_SICI_price_day_ahead IT_SICI_solar_generation_actual IT_SICI_wind_onshore_generation_actual IT_SUD_load_actual_entsoe_transparency IT_SUD_load_forecast_entsoe_transparency IT_SUD_price_day_ahead IT_SUD_solar_generation_actual IT_SUD_wind_onshore_generation_actual LT_load_actual_entsoe_transparency LT_load_forecast_entsoe_transparency LT_solar_generation_actual LT_wind_onshore_generation_actual LU_load_actual_entsoe_transparency LU_load_forecast_entsoe_transparency LV_load_actual_entsoe_transparency LV_load_forecast_entsoe_transparency LV_wind_onshore_generation_actual ME_load_actual_entsoe_transparency ME_load_forecast_entsoe_transparency ME_wind_onshore_generation_actual NL_load_actual_entsoe_transparency NL_load_forecast_entsoe_transparency NL_solar_generation_actual NL_wind_generation_actual NL_wind_offshore_generation_actual NL_wind_onshore_generation_actual NO_load_actual_entsoe_transparency NO_load_forecast_entsoe_transparency NO_wind_onshore_generation_actual NO_1_load_actual_entsoe_transparency NO_1_load_forecast_entsoe_transparency NO_1_price_day_ahead NO_1_wind_onshore_generation_actual NO_2_load_actual_entsoe_transparency NO_2_load_forecast_entsoe_transparency NO_2_price_day_ahead NO_2_wind_onshore_generation_actual NO_3_load_actual_entsoe_transparency NO_3_load_forecast_entsoe_transparency NO_3_price_day_ahead NO_3_wind_onshore_generation_actual NO_4_load_actual_entsoe_transparency NO_4_load_forecast_entsoe_transparency NO_4_price_day_ahead NO_4_wind_onshore_generation_actual NO_5_load_actual_entsoe_transparency NO_5_load_forecast_entsoe_transparency NO_5_price_day_ahead NO_5_wind_onshore_generation_actual PL_load_actual_entsoe_transparency PL_load_forecast_entsoe_transparency PL_solar_generation_actual PL_wind_onshore_generation_actual PT_load_actual_entsoe_transparency PT_load_forecast_entsoe_transparency PT_solar_generation_actual PT_wind_generation_actual PT_wind_offshore_generation_actual PT_wind_onshore_generation_actual RO_load_actual_entsoe_transparency RO_load_forecast_entsoe_transparency RO_solar_generation_actual RO_wind_onshore_generation_actual RS_load_actual_entsoe_transparency RS_load_forecast_entsoe_transparency SE_load_actual_entsoe_transparency SE_load_forecast_entsoe_transparency SE_wind_capacity SE_wind_offshore_capacity SE_wind_onshore_capacity SE_wind_onshore_generation_actual SE_1_load_actual_entsoe_transparency SE_1_load_forecast_entsoe_transparency SE_1_price_day_ahead SE_1_wind_onshore_generation_actual SE_2_load_actual_entsoe_transparency SE_2_load_forecast_entsoe_transparency SE_2_price_day_ahead SE_2_wind_onshore_generation_actual SE_3_load_actual_entsoe_transparency SE_3_load_forecast_entsoe_transparency SE_3_price_day_ahead SE_3_wind_onshore_generation_actual SE_4_load_actual_entsoe_transparency SE_4_load_forecast_entsoe_transparency SE_4_price_day_ahead SE_4_wind_onshore_generation_actual SI_load_actual_entsoe_transparency SI_load_forecast_entsoe_transparency SI_solar_generation_actual SI_wind_onshore_generation_actual SK_load_actual_entsoe_transparency SK_load_forecast_entsoe_transparency SK_solar_generation_actual SK_wind_onshore_generation_actual UA_load_actual_entsoe_transparency UA_load_forecast_entsoe_transparency timestamp
2014-12-31 23:00:00 2014-12-31 23:00:00 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 37248 NA NA 27913 NA NA 667 NA NA 27246 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 2664 NA NA 11554 NA NA 4040 NA NA 7514 NA NA NA NA NA 659 NA NA NA 2664 NA 12212 NA 4040 NA 8173 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 2014-12-31 23:00:00
2015-01-01 00:00:00 2015-01-01 00:00:00 5946 6701 35 NA 69 9484 9897 NA NA NA NA NA NA NA NA NA NA 455 NA 44 NA NA NA NA NA NA NA NA 41151 39723 37248 NA NA 27913 8852 0.3171 667 517 0.7744 27246 8336 0.3059 6839 7040 NA 4124 48 4076 NA NA NA NA NA NA NA 15163 14618 NA 857 13841 13362 NA 3866 469 3398 5307 4703 NA 5 NA NA 489 NA 4643 NA 1264 NA 3379 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 26758 32057 NA 2669 NA NA 11555 NA NA 4040 NA NA 7516 NA NA 849 NA NA 659 385 27607 NA 2669 NA 12214 NA 4040 NA 8174 385 NA NA NA NA NA NA NA NA 4037 3702 NA 14 2832 3550 1336 3681 NA NA 1721 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 401 362 NA NA NA NA NA NA 9401 8937 NA 1451 145 1306 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 4959 191 4767 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
2015-01-01 01:00:00 2015-01-01 01:00:00 5726 6593 45 NA 64 9152 9521 NA 734.81 518.66 216.15 4585 NA NA 479 7640.14 7696.04 455 0.05 44 14.00 NA NA NA 5957.57 5987 NA 38.48 40135 38813 37248 NA NA 27913 9054 0.3244 667 514 0.7710 27246 8540 0.3134 6955 7040 NA 4280 48 4232 NA NA NA NA NA NA NA 14826 14353 NA 794 13267 12858 NA 3974 466 3508 5087 4562 NA 7 3100.02 3126.8 489 NA 4643 2357.33 1264 902.71 3379 1454.62 1794.96 1784.9 16.04 NA 1774.05 567.07 1206.98 1305.06 1341.9 16.04 NA 583.28 335.64 247.64 764.7 676.4 0.1 46.1 22734 23515 50 5461 8735.4 8667.72 250.02 69773 69750 NA 1464 27166 31738 NA 2669 NA NA 11555 782 0.0676 4040 117 0.0290 7516 664 0.0884 782 NA NA 659 376 27948 NA 2669 NA 12214 1148 4040 117 8174 1041 5226.83 5550 NA 555 1812 1856 NA NA 3755 3437 NA 15 2678 3332 1271 3460 NA NA 1647 21534 22419 NA NA NA NA 2231 2448 NA NA NA 4201 4312 NA NA NA NA NA NA NA 10284 10565 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 861 848 NA NA NA 1767 1792 NA NA NA 2190 2454 NA NA NA NA NA NA NA 383 346 645 630 13 452.52 NA NA 8957 8608 NA 1447 145 1302 15104.99 15104.75 479.40 4552.10 4535.71 26.93 NA 4038.69 4065.77 26.93 158.6 2307.45 2383.21 27.98 233.53 2078.44 2098.16 27.98 68.67 2128.31 2021.90 26.93 18.6 13979.46 NA NA 1444.43 5123.9 4820 NA NA NA 551.0 NA NA NA NA NA NA 14485 13614 4959 191 4767 NA 1092 993 19.33 NA 1835 1653 19.33 NA 9277 8308 19.33 NA 2281 2660 19.33 NA 1045.47 816 NA 1.17 2728 2860 3.8 NA NA NA 2015-01-01 01:00:00
2015-01-01 02:00:00 2015-01-01 02:00:00 5347 6482 41 NA 65 8799 9135 NA 766.64 529.46 237.18 4440 NA NA 465 7391.44 7447.53 455 0.07 44 12.80 NA NA NA 5878.87 5845 NA 56.20 39106 38490 37248 NA NA 27913 9070 0.3249 667 518 0.7761 27246 8552 0.3139 7094 7263 NA 4042 48 3994 NA NA NA NA NA NA NA 14405 14098 NA 826 12702 12611 NA 4194 470 3724 4906 4517 NA 8 2980.39 3019.0 489 NA 4643 2387.35 1264 830.87 3379 1556.48 1744.76 1734.5 14.60 NA 1902.23 549.83 1352.40 1235.63 1284.5 14.60 NA 485.12 281.04 204.08 749.8 664.5 0.1 51.1 21286 22642 50 5238 8626.4 8612.74 264.08 66417 66300 NA 1543 24472 30690 NA 2669 NA NA 11555 785 0.0680 4040 120 0.0296 7516 666 0.0886 738 NA NA 659 354 25210 NA 2669 NA 12214 1139 4040 120 8174 1020 4987.34 5251 NA 557 1712 1759 NA NA 3510 3264 NA 11 2432 3048 1244 3171 NA NA 1598 20219 21020 NA NA NA NA 2089 2311 NA NA NA 3894 4005 NA NA NA NA NA NA NA 9752 9895 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 828 824 NA NA NA 1612 1686 NA NA NA 2044 2299 NA NA NA NA NA NA NA 370 334 629 614 15 416.46 NA NA 8462 8462 NA 1479 148 1331 14882.56 14882.51 422.74 4469.26 4453.10 26.83 NA 3955.79 4003.77 26.83 149.2 2272.86 2355.07 27.94 200.27 2037.06 2045.62 27.94 54.67 2147.59 2024.95 26.83 18.6 13453.78 NA NA 1509.14 4771.1 4521 NA NA NA 596.5 NA NA NA NA NA NA 14298 13502 4959 191 4767 NA 1059 991 17.66 NA 1794 1711 17.66 NA 9132 8194 17.66 NA 2313 2606 17.66 NA 1004.79 805 NA 1.04 2626 2810 3.8 NA NA NA 2015-01-01 02:00:00
2015-01-01 03:00:00 2015-01-01 03:00:00 5249 6454 38 NA 64 8567 8909 NA 733.13 406.94 326.19 4418 NA NA 460 7332.57 7381.67 455 0.07 44 13.73 NA NA NA 5827.80 5786 NA 71.21 38765 38644 37248 NA NA 27913 9163 0.3283 667 520 0.7793 27246 8643 0.3172 7364 7600 NA 3855 46 3808 NA NA NA NA NA NA NA 14083 13953 NA 852 12452 12490 NA 4446 473 3973 4865 4601 NA 11 2933.49 2976.3 489 NA 4643 2594.47 1264 915.43 3379 1679.04 1743.17 1734.0 14.95 NA 2123.97 660.47 1463.50 1190.32 1242.3 14.95 NA 470.50 254.96 215.54 746.5 672.0 0.1 56.1 20264 21785 42 4935 8674.1 8685.00 274.47 64182 63250 NA 1579 23003 28442 NA 2669 NA NA 11555 776 0.0672 4040 115 0.0284 7516 662 0.0880 690 NA NA 659 277 23693 NA 2669 NA 12214 1053 4040 115 8174 938 4879.48 5050 NA 559 1646 1704 NA NA 3427 3195 NA 9 2276 2830 1162 2966 NA NA 1439 19470 19903 NA NA NA NA 2032 2169 NA NA NA 3688 3777 NA NA NA NA NA NA NA 9446 9396 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 796 812 NA NA NA 1560 1593 NA NA NA 1948 2156 NA NA NA NA NA NA NA 364 326 631 616 15 399.46 NA NA 8156 8500 NA 1340 134 1206 14755.09 14755.00 408.35 4442.35 4425.76 26.81 NA 3900.05 3947.79 26.81 143.5 2285.79 2351.98 27.95 192.22 2012.77 2033.02 27.95 54.03 2114.13 1996.45 26.81 18.6 13306.00 NA NA 1548.33 4443.5 4250 NA NA NA 706.3 NA NA NA NA NA NA 14249 13494 4959 191 4767 NA 1019 988 17.53 NA 1775 1691 17.53 NA 9083 8215 17.53 NA 2372 2600 17.53 NA 983.79 803 NA 1.61 2618 2780 3.8 NA NA NA 2015-01-01 03:00:00
2015-01-01 04:00:00 2015-01-01 04:00:00 5309 6609 35 NA 64 8487 8806 NA 730.99 413.49 317.50 4393 NA NA 468 7002.08 7047.47 455 0.07 44 10.12 NA NA NA 5730.89 5711 NA 72.45 38941 38773 37248 NA NA 27913 9231 0.3307 667 520 0.7790 27246 8712 0.3197 7992 8186 NA 3753 46 3707 NA NA NA NA NA NA NA 13810 13604 NA 800 12454 12464 NA 4671 474 4198 4685 4519 NA 6 2941.54 2982.5 489 0.01 4643 3092.01 1264 1056.28 3379 2035.73 1751.47 1753.1 14.50 0.01 2525.12 743.59 1781.53 1190.07 1229.4 14.50 NA 566.89 312.69 254.20 754.6 691.7 0.1 52.9 19905 21441 34 4618 8845.3 8865.46 286.70 63859 61500 NA 1482 21832 25978 NA 2669 NA NA 11555 773 0.0669 4040 114 0.0281 7516 659 0.0877 644 NA NA 659 275 22476 NA 2669 NA 12214 1048 4040 114 8174 934 4909.53 5100 NA 597 1657 1674 NA NA 3438 3236 NA 6 2173 2672 1182 2817 NA NA 1457 19485 19565 NA NA NA NA 2014 2111 NA NA NA 3637 3634 NA NA NA NA NA NA NA 9588 9282 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 787 817 NA NA NA 1519 1567 NA NA NA 1940 2154 NA NA NA NA NA NA NA 354 320 644 633 17 393.89 NA NA 8126 8880 NA 1402 140 1262 14903.03 14903.00 415.94 4487.52 4463.79 26.97 NA 3914.78 3974.58 26.97 149.1 2333.07 2390.53 28.07 192.10 2036.84 2069.85 28.07 56.14 2130.82 2004.25 26.97 18.6 13175.58 NA NA 1618.57 4234.9 4083 NA NA NA 720.5 NA NA NA NA NA NA 14268 13707 4959 191 4767 NA 990 992 18.07 NA 1752 1721 18.07 NA 9102 8352 18.07 NA 2424 2642 18.07 NA 998.67 824 NA 1.60 2626 2790 3.8 NA NA NA 2015-01-01 04:00:00
2015-01-01 05:00:00 2015-01-01 05:00:00 5574 6543 35 NA 84 8428 8805 NA 820.66 549.60 271.06 4441 NA NA 460 7043.26 7086.59 455 0.07 44 12.17 NA NA NA 5668.53 5722 NA 75.14 39045 37247 37248 NA NA 27913 9689 0.3471 667 521 0.7815 27246 9167 0.3365 9104 7992 NA 3774 48 3726 NA NA NA NA NA NA NA 13396 12919 NA 949 12078 12020 NA 4963 473 4490 4466 4316 NA 2 2999.89 3025.3 489 0.01 4643 3270.63 1264 1068.07 3379 2202.56 1767.16 1771.0 10.76 0.01 2636.25 728.79 1907.46 1232.73 1254.3 10.76 NA 634.38 339.28 295.10 771.2 712.5 0.1 68.0 20010 21285 34 4397 8877.0 8888.62 264.30 63921 60850 NA 1387 21184 24645 NA 2669 NA NA 11555 766 0.0662 4040 109 0.0271 7516 656 0.0874 608 NA NA 659 270 21792 NA 2669 NA 12214 1036 4040 109 8174 926 4950.78 5002 NA 608 1683 1683 NA NA 3497 3272 NA 5 2136 2570 1313 2744 NA NA 1583 20349 20539 NA NA NA NA 2063 2272 NA NA NA 3705 3734 NA NA NA NA NA NA NA 10165 9878 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 807 861 NA NA NA 1508 1586 NA NA NA 2101 2208 NA NA NA NA NA NA NA 300 285 652 648 16 393.52 NA NA 8292 9995 NA 1742 174 1568 15130.74 15129.76 378.65 4646.16 4617.91 27.07 NA 3971.86 4039.56 27.07 152.6 2338.56 2406.97 28.39 157.58 2036.36 2064.47 28.39 49.87 2137.80 2000.85 27.07 18.6 13165.11 NA NA 1660.39 4118.2 3981 NA NA NA 764.7 NA NA NA NA NA NA 14655 14008 4959 191 4767 NA 1045 997 25.23 NA 1862 1736 25.23 NA 9353 8570 25.23 NA 2395 2705 25.23 NA 1045.17 886 NA 0.00 2641 2830 3.8 NA NA NA 2015-01-01 05:00:00
2015-01-01 06:00:00 2015-01-01 06:00:00 5925 6851 36 NA 131 8122 8651 NA 940.12 616.17 323.95 4637 NA NA 432 6836.73 6869.99 455 0.07 44 16.85 NA NA NA 5600.76 5713 NA 76.82 40206 40371 37248 NA NA 27913 10331 0.3701 667 520 0.7801 27246 9811 0.3601 10218 10227 NA 4054 48 4006 NA NA NA NA NA NA NA 13312 13176 NA 1298 12267 12527 NA 4974 472 4501 4411 4442 NA 6 3176.80 3124.6 489 0.01 4643 3502.55 1264 1141.11 3379 2361.44 1903.30 1837.1 12.01 0.01 2864.04 790.55 2073.49 1273.50 1287.5 12.01 NA 638.51 350.56 287.95 788.5 723.4 0.1 79.5 20377 21545 35 3992 9043.7 9015.80 262.72 64117 60450 NA 1583 20834 25096 NA 2669 NA NA 11555 763 0.0660 4040 106 0.0262 7516 658 0.0875 600 NA NA 659 286 21434 NA 2669 NA 12214 1049 4040 106 8174 943 5132.31 5193 48 621 1665 1641 NA NA 3546 3346 NA 3 2166 2550 1484 2766 NA NA 1769 20715 20815 NA NA NA NA 2086 2322 NA NA NA 3762 3774 NA NA NA NA NA NA NA 10498 10060 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 840 902 NA NA NA 1504 1550 NA NA NA 2025 2207 NA NA NA NA NA NA NA 308 281 655 665 18 401.68 NA NA 8638 11882 NA 1698 170 1528 15414.52 15414.51 329.20 4788.48 4752.04 26.80 NA 4024.11 4077.35 26.80 148.9 2353.71 2457.16 28.48 124.24 2116.42 2113.16 28.48 37.46 2131.80 2014.80 26.80 18.6 13029.75 NA NA 1786.57 4073.8 3940 NA NA NA 725.7 NA NA NA NA NA NA 14994 14292 4959 191 4767 NA 1066 996 26.80 NA 1872 1776 26.80 NA 9567 8754 26.80 NA 2489 2766 26.80 NA 1085.06 985 NA 0.00 2622 2790 3.8 NA NA NA 2015-01-01 06:00:00
2015-01-01 07:00:00 2015-01-01 07:00:00 6343 7061 36 2 109 8179 8674 NA 1087.66 627.60 460.06 4834 NA 234 316 6616.56 6649.63 455 0.23 44 13.82 NA NA NA 5651.05 5652 8.04 75.86 41133 42522 37248 71 0.0019 27913 10208 0.3657 667 525 0.7874 27246 9683 0.3554 10685 10630 52 3927 48 3879 NA NA NA NA NA NA NA 13583 14040 14 1394 12569 13216 15 4885 477 4408 4295 4636 8 2 3292.27 3249.1 489 0.03 4643 3706.07 1264 1162.82 3379 2543.25 1985.32 1924.0 12.39 0.01 3041.48 809.21 2232.27 1306.95 1325.1 12.39 NA 664.59 353.61 310.98 790.7 735.4 0.1 82.3 20094 21443 54 3629 8994.2 9058.75 261.46 63861 60150 NA 1814 21890 25534 NA 2669 NA NA 11555 778 0.0673 4040 111 0.0274 7516 668 0.0888 612 NA NA 659 287 22502 NA 2669 NA 12214 1065 4040 111 8174 955 5738.70 5775 207 633 1778 1701 NA NA 3671 3447 NA 2 2215 2566 1525 2826 NA NA 1812 21092 21117 NA NA NA NA 2127 2327 NA NA NA 3960 4280 NA NA NA NA NA NA NA 10277 9819 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 876 942 NA NA NA 1681 1731 NA NA NA 2171 2018 NA NA NA NA NA NA NA 302 283 657 682 17 433.40 NA NA 8927 13240 NA 1521 152 1369 15567.09 15567.50 328.49 4839.80 4804.72 26.97 NA 4096.00 4157.11 26.97 158.2 2323.94 2442.01 28.47 102.67 2148.27 2127.86 28.47 49.02 2159.08 2035.80 26.97 18.6 12945.35 NA NA 1866.69 3920.8 3797 NA NA NA 865.8 NA NA NA NA NA NA 15163 14554 4959 191 4767 NA 1033 1025 26.97 NA 1908 1833 26.97 NA 9629 8911 26.97 NA 2593 2785 26.97 NA 1142.36 1109 NA 0.00 2691 2980 3.9 NA NA NA 2015-01-01 07:00:00
2015-01-01 08:00:00 2015-01-01 08:00:00 6882 7233 41 10 146 8340 9037 92.66 1146.20 644.52 501.68 4983 NA 445 272 6559.91 6593.35 455 2.10 44 9.59 NA NA NA 6114.63 6074 22.04 86.07 42963 45020 37248 773 0.0207 27913 10029 0.3593 667 527 0.7907 27246 9502 0.3487 10620 10704 267 3965 48 3917 NA NA NA NA NA NA NA 14548 15175 272 1187 13154 14099 175 4876 479 4397 4640 5042 60 1 3378.64 3434.4 489 1.50 4643 3847.48 1264 1190.68 3379 2656.80 2015.15 2038.5 14.04 0.83 3137.93 814.19 2323.74 1363.49 1395.9 14.04 0.67 709.55 376.49 333.06 827.5 761.9 0.1 90.3 20637 21560 743 3073 9074.1 9106.51 240.68 64277 59950 385 1936 23137 26746 NA 2669 NA NA 11555 820 0.0710 4040 127 0.0315 7516 693 0.0922 648 NA NA 659 298 23784 NA 2669 NA 12214 1118 4040 127 8174 991 6471.00 6418 400 617 1951 1862 NA NA 3877 3665 NA 2 2237 2515 1469 2885 NA NA 1767 22776 23205 NA NA NA NA 2258 2496 NA NA NA 4446 4943 NA NA NA NA NA NA NA 10618 10400 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 941 1072 NA NA NA 1996 2135 NA NA NA 2517 2159 NA NA NA NA NA NA NA 300 288 688 705 21 468.63 NA NA 9312 13817 40 1509 151 1358 15852.32 15851.76 320.45 4929.96 4886.89 26.98 NA 4182.63 4268.19 26.98 165.3 2350.64 2478.21 28.49 93.38 2156.60 2132.67 28.49 43.17 2232.49 2085.80 26.98 18.6 13454.68 NA NA 1891.92 3883.8 3769 50.9 NA NA 844.5 NA NA NA NA NA NA 15167 14734 4959 191 4767 NA 1010 1037 26.29 NA 1883 1867 26.29 NA 9733 9014 26.29 NA 2541 2816 26.29 NA 1206.03 1209 4.97 0.00 2794 3070 8.0 NA NA NA 2015-01-01 08:00:00

Each field is typically labeled using a standard naming convention, such as ‘DE_load_actual_entsoe_transparency’ or ‘FR_solar_generation_actual’, where the prefix represents the country.

Deutscher Wetterdienst (DWD)

The DWD dataset refers to meteorological data provided by the Deutscher Wetterdienst (DWD) — the German National Meteorological Service. It offers a wide range of weather and climate data for Germany, and it’s commonly used in energy modeling, climate research, agriculture, hydrology, and environmental monitoring. For this analysis, we used hourly meteorological data from five major German cities: Berlin, Frankfurt, Munich, Cologne, and Hamburg. This dataset contains the informations such as:

  • timestamp_iso: ISO 8601 timestamp in local time with hourly resolution. Format: YYYY-MM-DD HH:MM:SS.
  • STATIONS_ID: Numeric station ID assigned by DWD. 1975 corresponds to a weather station in Hamburg.
  • QN_9: Quality level of the measurement (DWD code, typically 3 = validated data).
  • TT_TU: Air temperature at 2 meters above ground in Celsius (C).
  • RF_TU: Relative humidity at 2 meters in %.
timestamp berlin_temp hamburg_temp munich_temp cologne_temp frankfurt_temp temp_avg
2014-12-31 23:00:00 5.1 4.0 -1.2 5.1 0.2 2.64
2015-01-01 00:00:00 5.2 4.0 -1.3 5.2 -0.5 2.52
2015-01-01 01:00:00 5.1 4.1 -1.6 5.1 -0.3 2.48
2015-01-01 02:00:00 4.8 3.5 -1.9 4.8 -0.3 2.18
2015-01-01 03:00:00 4.8 3.3 -3.2 4.8 -0.4 1.86
2015-01-01 04:00:00 4.4 3.1 -3.3 4.4 -0.2 1.68
2015-01-01 05:00:00 3.7 3.5 -4.3 3.7 -0.2 1.28
2015-01-01 06:00:00 3.5 3.5 -4.5 3.5 -1.4 0.92
2015-01-01 07:00:00 3.6 3.1 -3.9 3.6 -0.6 1.16
2015-01-01 08:00:00 3.5 2.0 -4.7 3.5 -0.6 0.74

Data Preprocessing

To ensure the quality, consistency, and readiness of the data for analysis, we applied a comprehensive preprocessing pipeline to both the electricity time series dataset and the weather dataset. This step was crucial for enabling accurate temporal comparisons and robust visualizations. The following preprocessing actions were carried out:

  1. Temperature Data Cleaning (Weather Dataset)
  1. Electricity Data Cleaning (Load & Generation)

Analytical Questions

In the sections below, we address the key analytical questions through a series of data visualizations. Each plot is designed to highlight specific patterns, trends, or relationships within the electricity and weather datasets.

1. How Does Average Electricity Load Vary Across European Countries?

The choropleth map below visualizes the average electricity load (in megawatts) across European countries. The values were aggregated over the full time period and mapped using color intensity:

  • Brighter colors (yellow) indicate higher average electricity demand.
  • Darker shades (blue/purple) indicate lower average demand.

Interpretation

  • Germany stands out with the highest average load, exceeding 50,000 MW, shown in bright yellow. This reflects its large population, industrial base, and role as a central energy consumer in Europe.
  • France, Italy, and Spain also show relatively high demand (orange/pink tones), indicating their significant energy usage.
  • Eastern European and Balkan countries generally show moderate to low average loads (purple/blue), likely due to smaller populations, lower industrial demand, or different energy consumption patterns.
  • Some Nordic and Baltic states show lower load levels despite cold climates—possibly due to energy efficiency measures, lower population, or alternative heating methods.
  • Overall, western European countries (e.g., Germany, France) have higher average loads, aligning with their economic size and energy-intensive industries.
  • In contrast, Central and Eastern Europe shows lower average demand, possibly reflecting different energy infrastructures or economic scales.

Figure 1 provides a continental overview, highlighting Germany’s leading role in electricity consumption — a key motivation for our deeper analysis of German energy flow and renewable integration in the sections that follow.

2. How have solar and wind energy generation evolved annually in Germany and France?

We now shift our focus to Germany and France, comparing their yearly renewable energy production. The chart below illustrates the total annual electricity generation (in megawatts, MW) from solar and onshore wind sources for Germany and France between 2014 and 2020.

Interpretation

  • This plot demonstrates how Germany leads in renewable energy production in the region.
  • Wind energy is the most important contributor in both countries, but its scale in Germany is substantially higher.
  • Solar energy contributes less overall but shows consistent year-over-year growth.
  • These trends are vital for informing energy policy, infrastructure planning, and climate action strategies.

Germany

  • Wind energy is the dominant renewable source, showing a strong upward trend from 2014 to 2020 and peaking in 2019.
  • Solar energy displays consistent and moderate growth across all years.
  • Both sources slightly declined in 2020, which may reflect changes in weather, capacity, or operational conditions.

France

  • Wind energy has steadily increased, though at a lower absolute level than in Germany.
  • Solar energy remains modest and shows only minor growth from 2015 to 2020.

3. What are the temporal patterns in Germany’s Weakly solar and wind output?

This line chart displays the 7-day rolling average of solar and onshore wind electricity generation in Germany from 2014 to 2020. By smoothing daily fluctuations, the chart highlights long-term seasonal and interannual patterns in renewable output.

Interpretation

  • The combination of both helps balance renewable supply across seasons, mitigating the intermittency of each individual source.
  • Solar is cyclical and stable → reliable for forecasting.
  • Wind is erratic but powerful → useful for high-capacity contributions.

Solar Generation

Displays a clear and consistent seasonal cycle:

  • Peaks around May to August each year (summer).
  • Drops to near-zero values in winter (November to January).
  • The pattern is highly predictable due to the natural solar cycle.
  • Shows a gradual upward trend over the years, likely reflecting growing installed capacity and improved efficiency.

Wind Generation

  • Exhibits high short-term variability with frequent spikes and dips.
  • Slight tendency for higher output during late autumn and winter months.
  • More irregular compared to solar, likely due to fluctuating wind conditions.
  • Overall, wind generation shows growth in variability and output over time, especially from 2018 onwards.
  • The increased variability and rising peaks in wind output suggest expanded wind capacity or better harnessing of wind resources in recent years.

4. How does Germany’s total renewable energy production compare to its electricity consumption over time?

The plot below shows a stacked area chart of Germany’s annual electricity generation from solar and onshore wind, compared against the total electricity consumption, represented by the black dashed line, from 2014 to 2020.

Interpretation

  • Wind energy (light blue area) contributes the majority of renewable generation, showing a gradual upward trend from 2015 to 2019.
  • Solar energy (dark blue area) also increases steadily, but at a lower absolute scale than wind.
  • Total consumption (dashed line) remains relatively flat across most years, with a noticeable decline in 2020, likely related to the COVID-19 pandemic’s economic effects.
  • Despite growth in renewables, total generation from solar and wind remains significantly below total consumption, leaving a visible gap.

5. How Does Electricity Demand in Germany Vary by Hour of the Day and Month of the Year?

5.1 Hour of the Day

The boxplot below illustrates the distribution of electricity demand (in megawatts) for each hour of the day in Germany, aggregated across all days in the dataset. Each box represents the range and central tendency of load values for a specific hour.

Interpretation

  • Demand rises sharply starting around 5:00 AM, reflecting the beginning of daily activities.
  • Load reaches its peak between 8:00 AM and 2:00 PM, consistent with typical business and industrial operations.
  • After 2:00 PM, demand gradually declines, with a steady drop from 6:00 PM onward.
  • The lowest electricity demand consistently occurs between midnight and 5:00 AM, corresponding to nighttime inactivity.
  • The interquartile range (box height) is widest during the midday hours, indicating greater variability in daytime electricity use.
  • Outliers are more common in early morning and late evening, possibly due to unusual load spikes or drops.

5.2 Month of the Year

This heatmap in displays the average hourly electricity load (in megawatts) across each month in Germany. The color gradient represents the intensity of demand, with darker purples indicating lower demand and bright yellows indicating higher demand. The x-axis corresponds to the hour of the day, and the y-axis represents the month of the year.

Interpretation

  • Winter months (January, November, December) exhibit the highest overall demand, especially between 8:00 AM and 6:00 PM.
  • Summer months (June, July, August) show lower average loads, particularly during night hours.
  • Higher loads in winter suggest increased electricity use for heating, lighting, and possibly industrial activities, while summer demand is lower, possibly due to longer daylight hours and reduced heating needs.

6. How accurate are load forecasts compared to actual demand?

This scatter plot compares the forecasted electricity load with the actual measured load in Germany. Each point represents one hourly observation. The black dashed line is the ideal 1:1 line, where forecast and actual values would match exactly.

Interpretation

  • Most points lie closely along the diagonal line, indicating a strong agreement between forecasted and actual load.
  • The tight, dense cluster of points around the 1:1 line suggests that the forecasting model used is highly accurate across a broad range of load values.
  • Deviations become slightly larger at very high and very low load values, suggesting some forecast error during extreme demand conditions.
  • No major signs of systematic over- or underestimation—the deviations appear random and balanced, which is a good indication of unbiased forecasting.

7. What is the relationship between temperature and electricity demand in Germany, and how is it affected by extreme values?

This scatter plot visualizes the relationship between daily average temperature (°C) and total electricity demand (GWh/day) in Germany. Each point represents a daily observation. The blue line indicates a linear regression trend fitted across the full data range.

Interpretation

There is a clear negative correlation between temperature and electricity demand:

  • Colder days (left side of the plot, below 10°C) are generally associated with higher electricity usage.
  • Warmer days (right side of the plot) correspond to lower demand, particularly above ~15°C.
  • The trend line confirms this pattern, sloping downward, indicating that as temperature increases, average demand decreases.
  • Some high-demand outliers occur even at moderate temperatures, possibly reflecting exceptional days (e.g., holidays, industrial activity, or anomalies in data reporting)

Conclusion

This project provided a comprehensive visualization-based analysis of electricity demand and renewable energy generation in Germany between 2014 and 2020, integrating both meteorological and energy datasets. Key findings include:

Limitations

Despite the thorough visual and statistical analysis, this study has several limitations:

References